﻿using Dm;
using ERPPublic;
using MediatR;
using Newtonsoft.Json;
using Org.BouncyCastle.Ocsp;
using ProductionManagement.Application.Command.ScrapsCommand;
using ProductionManagement.Domain.Dtos;
using ProductionManagement.Domain.ProductionDomain;
using ProductionManagement.Dto;
using ProductionManagement.Infrstructre.lnterface;
using SqlSugar;
using static ERPPublic.ParseAPI;

namespace ProductionManagement.Application.CommandHandler.ScrapsCommandHandler
{
    /// <summary>
    /// 废料的显示
    /// </summary>
    public class BlikScrapsCommandHandler : IRequestHandler<BlikScrapsCommand, BlikProductionWasteDto>
    {

        IProductionWasteRepository pwRep;
        IProduceScrapsProductsRepository pspRep;
        ISqlSugarClient db;

        public BlikScrapsCommandHandler(IProductionWasteRepository pwRep,
        IProduceScrapsProductsRepository pspRep, ISqlSugarClient db)
        {
            this.pwRep = pwRep;
            this.pspRep = pspRep;
            this.db = db;
        }

        public async Task<BlikProductionWasteDto> Handle(BlikScrapsCommand request, CancellationToken cancellationToken)
        {

            List<Products> products = await GetProductList("", "", 1, 1000);
            var stripping = (from pw in await pwRep.GetAll() select pw).ToList();
            var strippingProduct = (from psp in await pspRep.GetAll() select psp).ToList();
            var list = from pw in stripping
                       where pw.PWId==request.PWId
                       select new BlikProductionWasteDto
                       {
                           PWId = pw.PWId,
                           ProductionWasteNumber = pw.ProductionWasteNumber,
                           ProductionWasteTopic = pw.ProductionWasteTopic,
                           PDocumentNumber = pw.PDocumentNumber,
                           ProductionDate = pw.ProductionDate,
                           PIsStorage = pw.PIsStorage,
                           PDocumentMakers = pw.PDocumentMakers,
                           PRemark = pw.PRemark,
                           Office_Id = pw.Office_Id,
                           User_Id = pw.User_Id,
                           AddName = pw.AddName,
                           AddTime = pw.AddTime,
                           UpdName = pw.UpdName,
                           UpdTime = pw.UpdTime,
                           ProductWasteLists=(from p in products
                                             join sp in strippingProduct on p.ProductId equals sp.ProductId
                                             where sp.ProductionWasteNumber==pw.ProductionWasteNumber
                                             select new ProductWasteLists
                                             {
                                                 ProductId = p.ProductId,
                                                 PNumber = p.PNumber,
                                                 PSpec = p.PSpec,
                                                 PUnit = p.PUnit,
                                                 PName = p.PName,
                                                 PScrapsNumber=sp.PScrapsNumber,
                                                 PSPId=sp.PSPId,
                                                 ProductionWasteNumber=sp.ProductionWasteNumber,

                                             }).ToList()

                       };
            return list.First();
        }


        /// <summary>
        /// 显示产品信息
        /// </summary>
        /// <param name="PName"></param>
        /// <param name="PNumber"></param>
        /// <param name="pindex"></param>
        /// <param name="psize"></param>
        /// <returns></returns>
        public async Task<dynamic> GetProductList(string? PName, string? PNumber, int pindex, int psize)
        {
            string token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1MCIsInNpZCI6IjE4NjcwOTU3MzQ0NjIwNTg0OTYiLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL2dyb3Vwc2lkIjoiMTksMTkiLCJqdGkiOiI1MGYyMWRmZS0yNWQ3LTQ1OTQtOTg1Yi0wZTM2MDhhZjJiNmYiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoi5LuY5rSb5ZiJIiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvdXJpIjoiLyIsImlzcyI6IlJlbmFvYm8yMDA0IiwiYXVkIjoiV2VpZnV3dTIyMDNBIn0._wh23n1M7asMGST9NyeZj-5rk5ICAiOFv6yDk6e2o7Y";
            HttpClientWrapper cilent = new HttpClientWrapper(token);

            string chanpin = "http://116.205.121.197:8000/erpcp/api/Product/ProductShow?PName=" + PName + "&PNumber=" + PNumber + "&ProductTypeId=" + 0 + "&PageIndex=" + pindex + "&PageSize=" + psize;

            string postReponse = await cilent.GetAsync(chanpin);
            var json = JsonConvert.DeserializeObject<ApiResultList<Products>>(postReponse);
            return json.data.list;
        }

        //产品
        public class Products
        {
            /// <summary>
            /// 产品Id
            /// </summary>
            [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
            public int ProductId { get; set; }
            /// <summary>
            /// 标识
            /// </summary>

            public int? PCharacteristic { get; set; }
            /// <summary>
            /// 产品编号
            /// </summary>
            [SugarColumn(ColumnDataType = "Nvarchar(50)")]//设计长度
            public string? PNumber { get; set; }
            /// <summary>
            /// 产品名称
            /// </summary>
            /// 
            [SugarColumn(ColumnDataType = "Nvarchar(50)")]//设计长度
            public string? PName { get; set; }
            /// <summary>
            /// 规格型号
            /// </summary>
            /// 
            [SugarColumn(ColumnDataType = "Nvarchar(50)")]//设计长度
            public string? PSpec { get; set; }
            /// <summary>
            /// 单位
            /// </summary>
            /// 
            [SugarColumn(ColumnDataType = "Nvarchar(50)")]//设计长度
            public string? PUnit { get; set; }

            /// <summary>
            /// 产品分类ID
            /// </summary>

            public int ProductTypeId { get; set; }




        }


    }




}
